#include<unordered_map>
#include<vector>
using namespace std;
class Solution {
public:
    int subarraySum(vector<int>& nums, int k) {
        //利用前缀和 + 哈希表 来解决问题 。
        //引入以 i 为结尾的子数组 。
        //我们要找到和为k的子数组 ， 只需要在0-i-1中找到 和为sum[i]-k的个数即可
        unordered_map<int,int> m{{0,1}}; //哈希表统计和 出现的次数
        int sum = 0 , n = nums.size(),ret =0;
        for(int i = 0 ; i < n ; i++){
            sum += nums[i];
            if(m.count(sum-k)) ret += m[sum-k];   //count函数在容器中搜索键为 k 的元素，并返回找到的元素数    
            //unordered_map 容器不允许重复键，这意味着如果容器中存在具有该键的元素，则函数实际上返回 1，否则返回 0。
            m[sum]++;
        }
        return ret;
    }
};